Memory devices are often used to store data provided by a computer program. Examples of memory storage devices include, but are not limited to, solid-state devices (SSDs), hard disk drives, and optical drives. These types of storage devices are inexpensive and hold large amounts of data. However, one tradeoff for their economic value is that they are slow compared to other components used in a computer. For example, a consumer hard drive can store terabytes of data cheaply, but has a maximum theoretical transfer rate of 300 megabytes (MB) per second. Random access memory (RAM) is faster in performance but higher in price, with a maximum theoretical transfer rate of 12.8 gigabytes (GB) per second. A central processing unit (CPU) with specialized memory known as level 1 (L1) cache or level 2 (L2) cache has even better performance but at an even higher price, with a transfer rate of 16 GB per second, or over fifty times faster than the storage device.
Because computer components exhibit this tradeoff between price and performance, a technique known as caching may be used to increase, or accelerate, overall system performance. Caching may be used to store data requested from one component, into another component, to speed future requests for the same data. The data stored in a cache often may be values previously requested by a software application, by an operating system, or by another hardware component. Caching organizes a small amount of fast-access memory and a large amount of slow-access memory. The first time that a value is requested, the data is not in the cache, so the requested value is retrieved from the slow-access memory. In a cache, when the value is retrieved from the slow-access memory, the value is sent to the component that requested it, and the value also is stored in the fast-access memory for future requests. The next time that the same value is requested by the operating system or by any other program, the value is retrieved from the fast-access memory, with the result that the overall system performance is faster, or accelerated, by virtue of the value being available from the fast-access memory. By using faster memory components to cache data more requests can be served from the cache instead of the slower storage device and the faster overall system performance can be realized.
Computers run operating systems such as MICROSOFT® Windows, MACINTOSH® OS X®, LINUX®, or UNIX®. An operating system manages computer hardware resources and provides common services for execution of various software applications. A virtual machine (“VM”) is a software implementation of a computer that runs programs as if it is physical computer hardware. Typically a virtual machine has a completely isolated operating system, called a “guest” operating system, installed and running within a normal host operating system.
A hypervisor is software that allows multiple virtual machines to run concurrently on a single host computer. The name hypervisor is used because the programming runs conceptually one level higher than a “supervisor” program. In Information Technology administration, administrators strive to balance competing goals of finding ways to scale and consolidate their computing infrastructures, while at the same time decreasing the management overhead required to allocate and monitor resources in those infrastructures. One way to address these competing goals is to run multiple virtual machines concurrently using a hypervisor. Hypervisors are generally installed on server hardware whose sole dedicated task is to run virtual machines. “Bare metal” hypervisors run directly on host hardware to control the hardware and to manage guest operating systems. VMWARE®, Inc.'s ESX and ESXi products are examples of bare metal hypervisors.
In the VMWARE® ESX and ESXi products, virtual machines access computer files using a file system known as Virtual Machine File System (VMFS). VMFS provides a file system and storage virtualization optimized for virtual machines. Each virtual machine is allocated its own virtual storage in VMFS. VMFS provides a common mechanism for ensuring data consistency for accessing virtual storage among multiple virtual machines and among multiple hypervisor platforms.
Storage subsystems employed for critical applications employ multiple levels of redundancy to ensure higher availability even when components fail. It is common to configure multiple paths to a storage device. Multi-pathing is when the same storage device can be reached from a host via two routes involving two distinct set of hardware interconnects and bridges. This ensures the data is still accessible when the interconnect or adapter fails.